WRAP_CLASS("itk::ArrivalFunctionToPathFilter")

  SET(MANAGED_TYPE_TEMPLATE ${MANAGED_ITK_SOURCE_COMMON_PATH}/itkManagedImageToPathFilter_TYPE.cxx.in)
  SET(MANAGED_WRAPPER_TEMPLATE ${MANAGED_ITK_SOURCE_COMMON_PATH}/itkManagedImageToPathFilter_WRAPPER.cxx.in)

  # WRAP_IMAGE_FILTER_USIGN_INT(1)
  # WRAP_IMAGE_FILTER_SIGN_INT(1)
  WRAP_IMAGE_FILTER_REAL(1)

  BEGIN_MANAGED_PROPERTY("TerminationValue" GETSET)
    SET(MANAGED_PROPERTY_SUMMARY   "Get/set the value to terminate the back-propagation.")
    SET(MANAGED_PROPERTY_TYPE      "double")
    SET(MANAGED_PROPERTY_GET_BODY  "return m_PointerToNative->GetTerminationValue( );")
    SET(MANAGED_PROPERTY_SET_BODY  "m_PointerToNative->SetTerminationValue( value );")
  END_MANAGED_PROPERTY()

  BEGIN_MANAGED_METHOD("SetOptimizer")
    SET(MANAGED_METHOD_SUMMARY         "Set the optimizer.")
    SET(MANAGED_METHOD_RETURN_TYPE     "void")
    SET(MANAGED_METHOD_PARAMS          "itkSingleValuedNonLinearOptimizer^ optimizer")
    SET(MANAGED_METHOD_TYPE_BODY       "m_PointerToNative->SetOptimizer( (NativeType::OptimizerType*)optimizer->NativePointer.ToPointer() );")
    SET(MANAGED_METHOD_WRAPPER_BODY    "iInstance->SetOptimizer( optimizer );")
  END_MANAGED_METHOD()
  
  BEGIN_MANAGED_METHOD("GetOptimizer")
    SET(MANAGED_METHOD_SUMMARY         "Get the optimizer.")
    SET(MANAGED_METHOD_RETURN_TYPE     "void")
    SET(MANAGED_METHOD_PARAMS          "itkSingleValuedNonLinearOptimizer^ optimizer")
    SET(MANAGED_METHOD_TYPE_BODY       "optimizer->NativePointer = IntPtr((NativeType::OptimizerType*)m_PointerToNative->GetOptimizer( ));")
    SET(MANAGED_METHOD_WRAPPER_BODY    "iInstance->GetOptimizer( optimizer );")
  END_MANAGED_METHOD()
  
  BEGIN_MANAGED_METHOD("SetCostFunction")
    SET(MANAGED_METHOD_SUMMARY         "Set the cost function.")
    SET(MANAGED_METHOD_RETURN_TYPE     "void")
    SET(MANAGED_METHOD_PARAMS          "itkSingleValuedCostFunction^ function")
    SET(MANAGED_METHOD_TYPE_BODY       "m_PointerToNative->SetCostFunction( (NativeType::CostFunctionType*)function->NativePointer.ToPointer() );")
    SET(MANAGED_METHOD_WRAPPER_BODY    "iInstance->SetCostFunction( function );")
  END_MANAGED_METHOD()
  
  BEGIN_MANAGED_METHOD("GetCostFunction")
    SET(MANAGED_METHOD_SUMMARY         "Get the cost function.")
    SET(MANAGED_METHOD_RETURN_TYPE     "void")
    SET(MANAGED_METHOD_PARAMS          "itkSingleValuedCostFunction^ function")
    SET(MANAGED_METHOD_TYPE_BODY       "function->NativePointer = IntPtr((NativeType::CostFunctionType*)m_PointerToNative->GetCostFunction( ));")
    SET(MANAGED_METHOD_WRAPPER_BODY    "iInstance->GetCostFunction( function );")
  END_MANAGED_METHOD()

  BEGIN_MANAGED_METHOD("ClearPathEndPoints")
    SET(MANAGED_METHOD_SUMMARY         "Clear the list of end points.")
    SET(MANAGED_METHOD_RETURN_TYPE     "void")
    SET(MANAGED_METHOD_PARAMS          "void")
    SET(MANAGED_METHOD_TYPE_BODY       "m_PointerToNative->ClearPathEndPoints( );")
    SET(MANAGED_METHOD_WRAPPER_BODY    "iInstance->ClearPathEndPoints( );")
  END_MANAGED_METHOD()

  BEGIN_MANAGED_METHOD("SetPathEndPoint")
    SET(MANAGED_METHOD_SUMMARY         "Clears the list of end points and adds the given point to the list.")
    SET(MANAGED_METHOD_RETURN_TYPE     "void")
    SET(MANAGED_METHOD_PARAMS          "itkPoint^ point")
    SET(MANAGED_METHOD_TYPE_BODY       "m_PointerToNative->SetPathEndPoint( itk::ManagedTypes::ToNativePoint<NativeType::PointType::PointDimension>(point) );")
    SET(MANAGED_METHOD_WRAPPER_BODY    "iInstance->SetPathEndPoint( point );")
  END_MANAGED_METHOD()

  BEGIN_MANAGED_METHOD("AddPathEndPoint")
    SET(MANAGED_METHOD_SUMMARY         "Adds the given point to the list.")
    SET(MANAGED_METHOD_RETURN_TYPE     "void")
    SET(MANAGED_METHOD_PARAMS          "itkPoint^ point")
    SET(MANAGED_METHOD_TYPE_BODY       "m_PointerToNative->AddPathEndPoint( itk::ManagedTypes::ToNativePoint<NativeType::PointType::PointDimension>(point) );")
    SET(MANAGED_METHOD_WRAPPER_BODY    "iInstance->AddPathEndPoint( point );")
  END_MANAGED_METHOD()

END_WRAP_CLASS()
